$(function(){
    /*********************************************/
    /* Definition des variable de fonctionement. */
    /*********************************************/
    
    var db = getDB(); //lancement de la connexion � la bdd (cr�ation de la BDD si c'est le premier lancement)
    var windowSnippet = null; //d�finition de la variable contenant l'objet de la fenettre ajout/edition des snippets
    var actuel = null; //d�finition de la variable contenant l'id du snippet actuelement consult�

    /**********************************************/
    /* Definition des fonctions de fonctionement. */
    /**********************************************/

    //fonction de redimentionnement des zones de l'interface
    function size(){
        $('#sidebar').height($(window).height()-$('#menu').height()-11);
        $("#content").width($(window).width()-$("#sidebar").width());
        $("#content").height($(window).height()-$('#menu').height()-11);
        $("#content").css({marginLeft: $("#sidebar").width()});

        $("#haut").width($("#content").width());
        $('#liste').height($("#haut").height()-20);
        $("#bas").height($(window).height()-$('#haut').height()-$('#menu').height()-18);
    }

    //chargement de la liste des snippets selon la categorie choisi
    function loadListSnippet(type, valeur){
        var req; //initialisation de la variable contenant la requete

        if((type === undefined && valeur === undefined) || valeur == "Tous"){  //verification du passable des paramettre de la fonction
            req = db.execute('SELECT table_snippet.id_snippet, table_snippet.nom_snippet, table_snippet.code_langue, table_snippet.langage_snippet, table_categorie.nom_categorie FROM table_snippet LEFT JOIN table_cat_to_snippet ON table_cat_to_snippet.id_snippet = table_snippet.id_snippet LEFT JOIN table_categorie ON table_categorie.id_categorie = table_cat_to_snippet.id_categorie');
        }else if(valeur == "cat"){
            req = db.execute('SELECT table_snippet.id_snippet, table_snippet.nom_snippet, table_snippet.code_langue, table_snippet.langage_snippet, table_categorie.nom_categorie FROM table_snippet LEFT JOIN table_cat_to_snippet ON table_cat_to_snippet.id_snippet = table_snippet.id_snippet LEFT JOIN table_categorie ON table_categorie.id_categorie = table_cat_to_snippet.id_categorie WHERE table_categorie.id_categorie = "'+type+'"');
        }else{
            req = db.execute('SELECT table_snippet.id_snippet, table_snippet.nom_snippet, table_snippet.code_langue, table_snippet.langage_snippet, table_categorie.nom_categorie FROM table_snippet LEFT JOIN table_cat_to_snippet ON table_cat_to_snippet.id_snippet = table_snippet.id_snippet LEFT JOIN table_categorie ON table_categorie.id_categorie = table_cat_to_snippet.id_categorie WHERE table_snippet.'+type+' = "'+valeur+'"');
        }

                
        $('#haut table#corpTableau tbody').html(''); //vidage du contenu du tableau listant les snippets
        
        while(req.isValidRow()){ //parcourt des donn�es renvoyer et ajout dans le tableau
            $('#haut table#corpTableau tbody').append('<tr lang="'+req.fieldByName('code_langue')+'" id_code="'+req.fieldByName('id_snippet')+'"><td style="width: 40%">'+req.fieldByName('nom_snippet')+'</td><td style="width: 30%">'+req.fieldByName('langage_snippet')+'</td><td style="width: 30%">'+req.fieldByName('nom_categorie')+'</td></tr>');
            req.next();
        }

        $('#haut table#corpTableau tbody tr').click(function(){
            $('#haut table##corpTableau tbody tr').removeClass('selected');
            $(this).addClass('selected');
            actuel = $(this).attr('id_code');
            loadSnippet(actuel);
        });
    }
    
    function loadListCat(){
        var req = db.execute('SELECT id_categorie, nom_categorie FROM table_categorie ORDER BY nom_categorie');

        $('#cat').html('');
        
        while(req.isValidRow()){
            $('#cat').append('<li idcat="'+req.fieldByName('id_categorie')+'">'+stripslashes(req.fieldByName('nom_categorie'))+'<span class="deleteCat"><img src="images/deleteCat.png" /></span></li>');
            req.next();
        }

        $('#cat li').click(function(){
            loadListSnippet($(this).attr('idcat'), "cat");
            
            $('#cat li').removeClass('selected');
            $('#lan li').removeClass('selected');
            $(this).addClass('selected');
        });

        $('#cat li').dblclick(function(){
            $(this).children('span').slideToggle();
        });

        $('#cat li span').click(function(){
            var id = $(this).parent().attr('idcat');
            db.execute('DELETE FROM table_categorie WHERE id_categorie = "'+id+'"');
            db.execute('DELETE FROM table_cat_to_snippet WHERE id_categorie = "'+id+'"');

            $(this).parent().slideUp('fast', function(){
                $(this).remove();
            });
        });
    }


    //chargement du snippet choisit et affichage dans la zone approprier
    function loadSnippet(id_snippet){
        var req = db.execute('SELECT id_snippet, nom_snippet, langage_snippet, code_snippet, code_langue FROM table_snippet WHERE id_snippet = "'+id_snippet+'" ORDER BY nom_snippet');
        
        if(req.isValidRow()){
            $('#bas').html('<pre unselectable="off" class="'+req.fieldByName('code_langue')+'">'+stripslashes(req.fieldByName('code_snippet'))+'</pre>');
            sh_highlightDocument('lang/', '.js');
        }
    }

    //copie du snippet selectionn� dans le presse papier
    function copyToClipboard(){
        var req = db.execute('SELECT code_snippet FROM table_snippet WHERE id_snippet = "'+actuel+'"');

        if(req.isValidRow()){
            Titanium.UI.Clipboard.clearText();
            Titanium.UI.Clipboard.setText(htmlspecialchars_decode(htmlspecialchars_decode (stripslashes(req.fieldByName('code_snippet')))));
        }
        
    }

    //recherche du nom voulut et affichage dans le tableau
    function recherche(nom){
        if(nom == "") return false;

        var req = db.execute('SELECT id_snippet, nom_snippet, langage_snippet, code_langue FROM table_snippet WHERE nom_snippet LIKE "%'+nom+'%"');

        $('#haut table#corpTableau tbody').html('');

        while(req.isValidRow()){ //parcourt des donn�es renvoyer et ajout dans le tableau
            $('#haut table#corpTableau tbody').append('<tr lang="'+req.fieldByName('code_langue')+'" id_code="'+req.fieldByName('id_snippet')+'"><td>'+req.fieldByName('nom_snippet')+'</td><td>'+req.fieldByName('langage_snippet')+'</td><td></td></tr>');
            req.next();
        }

        $('#haut table##corpTableau tbody tr').click(function(){
            $('#haut table##corpTableau tbody tr').removeClass('selected');
            $(this).addClass('selected');
            actuel = $(this).attr('id_code');
            loadSnippet(actuel);
        });
    }

    /******************************/
    /* Definition des evenements. */
    /******************************/

    /* Creation d'un nouveau snippet*/
    $('#new').click(function(){

        /*On v�rifie que la fenettre de creation ne soit pas d�j� ouverte. Si c'est le cas, on s'arr�te l�*/
        if(windowSnippet != null)
            return false;

        windowSnippet = Titanium.UI.createWindow({
            url: 'app://new.html',
            minWidth: 400,
            minHeight: 300,
            width: 600,
            weight: 500
        });

        windowSnippet.open();

        windowSnippet.addEventListener('close', function(){
            loadListSnippet();
            windowSnippet = null;
        });
    });

    /* Creation d'un nouveau snippet*/
    $('#newCat').click(function(){

        /*On v�rifie que la fenettre de creation ne soit pas d�j� ouverte. Si c'est le cas, on s'arr�te l�*/
        if(windowSnippet != null)
            return false;

        windowSnippet = Titanium.UI.createWindow({
            url: 'app://newCat.html',
            width: 300,
            height: 35,
            minWidth: 300,
            minHeight: 30
        });

        windowSnippet.open();

        windowSnippet.addEventListener('close', function(){
            loadListCat();
            windowSnippet = null;
        });
    });
    
    //edition d'un snippet
    $('#editer').click(function(){

        /*On v�rifie que la fenettre de creation ne soit pas d�j� ouverte. Si c'est le cas, on s'arr�te l�*/
        if(windowSnippet != null)
            return false;

        if(actuel == null)
            return false;

        windowSnippet = Titanium.UI.createWindow('app://new.html');

        windowSnippet = Titanium.UI.createWindow({
            url: 'app://new.html',
            minWidth: 400,
            minHeight: 300,
            Width: 600,
            Height: 500
        });

        windowSnippet.idcode = actuel;
        
        windowSnippet.open();

        windowSnippet.addEventListener('close', function(){
            loadListSnippet();
            loadSnippet(actuel);
            windowSnippet = null;
        });
    });

    //suppresion d'un snippet
    $('#supprimer').click(function(){

        if(actuel == null)
            return false;

        var sur = confirm('Etes vous sur de vouloir supprimer ce snippet?');

        if(sur)
            db.execute('DELETE FROM table_snippet WHERE id_snippet ="'+actuel+'"');

        actuel = null;

        loadListSnippet();
    })

    //Copie dans le presse papier
    $('#clipboard').click(function(){
        if(actuel != null)
            copyToClipboard();
    });

    //Trie en fonction de la langue
    $('#lang li').click(function(){
        loadListSnippet('code_langue', $(this).attr('brush'));

        $('#lang li').removeClass('selected');
        $('#cat li').removeClass('selected');
        $(this).addClass('selected');
    });

    //Recherche dans la base de donn�e
    $('#recherche').keyup(function(){
        recherche($(this).val());
    });

    //redimentionnement de la partie haute du tableau
    $('#haut').resizable({
        handles: 's',
        minHeight: 200,
        maxHeight: 400
    });

    $('#sidebar h1').click(function(){
        if($(this).children('span').text() == '+')
            $(this).children('span').text('-');
        else
            $(this).children('span').text('+');
        
        $(this).next('ul').slideToggle();
    })


    /*******************/
    /* Initialisation. */
    /*******************/
    
    loadListSnippet();
    loadListCat();
    $("#haut").resize(function(){size();});
    $(window).resize(function(){size();});
    size();
});